package com.hl.yyx.mapper;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hl.yyx.common.exception.ApiException;

import java.io.Serializable;
import java.util.function.Supplier;

public interface MyBaseMapper<T> extends BaseMapper<T> {
    /**
     * 自定义根据id查询，如果数据不存在则抛出异常
     * @param id
     * @return
     */
    default T hFindById(String id) {
        if (StrUtil.isEmpty(id)) {
            throw new ApiException("id不能为空");
        }
        T entity = selectById(id);
        if (entity == null) {
            throw new ApiException("数据不存在，ID: " + id);
        }
        return entity;
    }

    /**
     * 自定义根据id查询，如果数据不存在则抛出指定的异常
     * @param id
     * @param exceptionSupplier
     * @return
     */
    default T hFindById(Serializable id, Supplier<? extends RuntimeException> exceptionSupplier) {
        T entity = selectById(id);
        if (entity == null) {
            throw exceptionSupplier.get();
        }
        return entity;
    }

    /**
     * 自定义根据 ID 删除数据，如果数据不存在则抛出异常
     */
    default void hDeleteById(String id) {
        if (StrUtil.isEmpty(id)) {
            throw new ApiException("ID 不能为空");
        }
        if (selectById(id) == null) {
            throw new ApiException("数据不存在，ID: " + id);
        }
        int i = deleteById(id);
        if (i == 0) {
            throw new ApiException("删除失败，ID: " + id);
        }
    }

    /**
     * 自定义根据 ID 删除数据，如果数据不存在则抛出指定的异常
     */
    default void hDeleteById(String id, Supplier<? extends RuntimeException> exceptionSupplier) {
        if (StrUtil.isEmpty(id)) {
            throw new IllegalArgumentException("ID 不能为空");
        }
        if (selectById(id) == null) {
            throw exceptionSupplier.get();
        }
        int i = deleteById(id);
        if (i == 0) {
            throw new ApiException("删除失败，ID: " + id);
        }
    }

}